#include<iostream>
#include<stack>
using namespace std;
const int N=1e6+10;
struct node
{
	int h,v;
}nums[N];
int dist[N];
int main()
{
	int n;cin>>n;
	stack<int> st1;

	for(int i=1;i<=n;i++)
	{
		cin>>nums[i].h>>nums[i].v;
		while(!st1.empty()&&nums[st1.top()].h<=nums[i].h)
		{
			st1.pop();
		}
		if(!st1.empty())
		{
			dist[st1.top()].v+=nums[i].v;
		}
		st1.push(i);
	}

	stack<int> st2;
	for(int i=n;i>=1;i--)
	{
		while(!st2.empty()&&nums[st2.top()].h<=nums[i].h)
		{
			st2.pop();
		}
		if(!st2.empty())
		{
			dist[st2.top()].v+=nums[i].v;
		}
		st2.push(i);
	}

	int ret=0;
	for(int i=1;i<=n;i++)
	{
		ret=max(dist[i].v,ret);
	}
	cout<<ret<<endl;
}